// index.js
const BizService = require('../../services/biz');
const BannerService = require('../../services/banner');
const auth = require('../../utils/auth.js');
const locationUtil = require('../../utils/location.js');
const UserService = require('../../services/user.js');

Page({
	data: {
		bizList: [],
		allBizList: [], // 存储所有商家数据（用于距离排序）
		annData:[],
		indexCommentData:[],
		menuList:[],
		currentCity: '选城市',
		// 添加登录状态相关数据
		isLoggedIn: false,
		userInfo: null,
		loginReady: false,
		showPhoneBindTip: false, // 是否显示手机号绑定提示
		filterType: 'recommend', // 筛选类型
		rangeType: 'recommend', // 范围类型
		userLocation: null, // 用户位置信息
		locationPermission: false, // 位置权限状态
		page: 1, // 当前页码
		pageSize: 10, // 每页数量
		hasMore: true, // 是否有更多数据
		loading: false, // 是否正在加载
		allDataLoaded: false, // 是否已加载所有数据
		userProfile: null,
		// 排序弹出层相关
		showSortPopup: false, // 是否显示排序弹出层
		sortOptions: [
			{ name: '默认排序', value: 'recommend' },
			{ name: '距离最近', value: 'distance' },
			{ name: '评分最高', value: 'rating' },
			{ name: '销量最高', value: 'sales' }
		],
		currentSort: 'recommend', // 当前选中的排序方式
		currentSortName: '默认排序', // 当前排序方式的显示名称
		// 导航栏背景色相关
		navbarBackgroundColor: 'transparent' // 导航栏背景色，默认为透明
	},

	onLoad() {
		this.loadBizs();
		this.loadIndexCommentData();
		this.loadCurrentCity();
		// 检查登录状态
		this.checkLoginStatus();
		// 获取用户位置
		this.getUserLocation();
	},

	/**
	 * 页面滚动监听
	 */
	onPageScroll(e) {
		const scrollTop = e.scrollTop;
		// 计算背景色透明度，实现平滑渐变效果
		const maxScroll = 100; // 最大滚动距离
		const alpha = Math.min(scrollTop / maxScroll, 1); // 透明度从0到1
		
		let newBackgroundColor;
		if (alpha === 0) {
			newBackgroundColor = 'transparent';
		} else {
			// 使用rgba格式，alpha为透明度
			newBackgroundColor = `rgba(255, 255, 255, ${alpha})`;
		}
		
		if (this.data.navbarBackgroundColor !== newBackgroundColor) {
			this.setData({
				navbarBackgroundColor: newBackgroundColor
			});
		}
	},

	/**
	 * 页面显示时重新加载当前城市信息
	 */
	onShow() {
		this.loadCurrentCity();
		// 页面显示时检查登录状态
		if (this.data.loginReady) {
			this.checkLoginStatus();
		}
	},

	/**
	 * 检查登录状态
	 */
	async checkLoginStatus() {
		try {
			const loginStatus = await auth.checkLoginStatus();
			console.log('检查登录状态:', loginStatus);
			
			// 检查用户是否已绑定手机号
			const hadBindPhone = loginStatus.isLoggedIn && loginStatus.userInfo.phone != undefined;
			console.log(hadBindPhone);

			this.setData({
				isLoggedIn: loginStatus.isLoggedIn,
				userInfo: loginStatus.userInfo,
				loginReady: true, // 标记登录状态检查已完成
				showPhoneBindTip: !hadBindPhone
			});

			if(loginStatus.isLoggedIn){
				this.loadUserInfo();
			}
		} catch (error) {
			console.error('检查登录状态失败:', error);
			this.setData({
				loginReady: true // 即使失败也要标记为已完成
			});
		}
	},

	async loadUserInfo(){
		const result = await UserService.getUserInfo({
			showLoading: true
		});

		if(result.success){
			this.setData({
				userProfile: result.data
			});
		}
	},

	async loadIndexCommentData(){
		try {
			const result = await BannerService.getBannerList({
				showLoading: true
			});

			if (result.success) {
				this.setData({
					indexCommentData: result.data,
					annData: result.data.ann,
					menuList: result.data.menu
				});
			} else {
				
			}
		} catch (error) {
		}
	},

	/**
	 * 获取用户位置
	 */
	async getUserLocation() {
		try {
			// 检查位置权限
			const setting = await wx.getSetting();
			if (setting.authSetting['scope.userLocation'] === false) {
				// 用户拒绝了位置权限
				this.setData({
					locationPermission: false
				});
				return;
			}

			// 获取位置信息
			const location = await locationUtil.getUserLocation();
			if (location.success) {
				this.setData({
					userLocation: location,
					locationPermission: true
				});
				
				
				// 获取位置成功后，重新加载商家列表以计算距离
				this.reloadBizListWithLocation();
			}
		} catch (error) {
			console.error('获取位置失败:', error);
			this.setData({
				locationPermission: false
			});
		}
	},

	/**
	 * 重新加载商家列表（获取位置后调用）
	 */
	reloadBizListWithLocation() {
		// 如果当前是距离筛选，重新加载所有数据并排序
		if (this.data.filterType === 'nearby') {
			this.setData({
				allDataLoaded: false,
				allBizList: [],
				page: 1
			}, () => {
				this.loadAllBizs();
			});
		} else {
			// 其他筛选类型，只重新计算距离显示，不排序
			if (this.data.bizList.length > 0) {
				const bizListWithDistance = locationUtil.addDistanceToBizList(this.data.bizList, this.data.userLocation);
				this.setData({
					bizList: bizListWithDistance
				});
			}
		}
	},

	/**
	 * 请求位置权限
	 */
	requestLocationPermission() {
		wx.showModal({
			title: '位置权限',
			content: '需要获取您的位置信息来显示附近的商家，是否授权？',
			success: (res) => {
				if (res.confirm) {
					wx.openSetting({
						success: (settingRes) => {
							if (settingRes.authSetting['scope.userLocation']) {
								// 用户授权后，立即获取位置并重新加载数据
								this.getUserLocation();
							}
						}
					});
				}
			}
		});
	},

	/**
	 * 加载所有商家数据（用于距离排序）
	 */
	async loadAllBizs() {
		if (this.data.allDataLoaded) {
			return;
		}

		try {
			this.setData({ loading: true });

			// 加载所有商家数据（不分页）
			const result = await BizService.getBizList({
				showLoading: false,
				type: this.data.filterType,
				range: this.data.rangeType,
				page: 1,
				pageSize: 1000 // 设置一个较大的值来获取所有数据
			});

			if (result.success) {
				let allBizList = result.data || [];
				
				// 如果有用户位置信息，计算距离
				if (this.data.userLocation) {
					allBizList = locationUtil.addDistanceToBizList(allBizList, this.data.userLocation);
					
					// 只有在"附近"筛选时才按距离排序
					if (this.data.filterType === 'nearby') {
						allBizList = locationUtil.sortBizListByDistance(allBizList);
					}
				}

				this.setData({
					allBizList: allBizList,
					allDataLoaded: true,
					loading: false
				});

				// 更新当前页显示的数据
				this.updateCurrentPageData();
			}
		} catch (error) {
			console.error('加载所有商家数据失败:', error);
			this.setData({ loading: false });
		}
	},

	/**
	 * 更新当前页显示的数据
	 */
	updateCurrentPageData() {
		const startIndex = (this.data.page - 1) * this.data.pageSize;
		const endIndex = startIndex + this.data.pageSize;
		const currentPageData = this.data.allBizList.slice(startIndex, endIndex);
		
		this.setData({
			bizList: currentPageData,
			hasMore: endIndex < this.data.allBizList.length
		});
	},

	/**
	 * 加载商家数据（兼容原有逻辑）
	 */
	async loadBizs() {
		// 只有在"附近"筛选时才需要加载所有数据并排序
		if (this.data.filterType === 'nearby') {
			await this.loadAllBizs();
		} else {
			// 其他筛选类型使用分页加载，只显示距离不排序
			await this.loadBizsByPage();
		}
	},

	/**
	 * 分页加载商家数据
	 */
	async loadBizsByPage() {
		if (this.data.loading) {
			return;
		}

		try {
			this.setData({ loading: true });

			const result = await BizService.getBizList({
				showLoading: false,
				type: this.data.filterType,
				range: this.data.rangeType,
				page: this.data.page,
				pageSize: this.data.pageSize
			});

			if (result.success) {
				let newList = this.data.page === 1 ? (result.data || []) : [...this.data.bizList, ...(result.data || [])];
				
				// 如果有用户位置信息，计算距离
				if (this.data.userLocation) {
					newList = locationUtil.addDistanceToBizList(newList, this.data.userLocation);
				}

				this.setData({
					bizList: newList,
					loading: false,
					hasMore: (result.data || []).length >= this.data.pageSize
				});
			} else {
				this.setData({ loading: false });
			}
		} catch (error) {
			console.error('加载商家数据失败:', error);
			this.setData({ loading: false });
		}
	},

	/**
	 * 加载当前城市信息
	 */
	loadCurrentCity() {
		try {
			const currentCity = wx.getStorageSync('current_city');
			if (currentCity) {
				// 如果缓存中有城市信息，则显示城市名称
				this.setData({
					currentCity: currentCity.name || currentCity
				});
			} else {
				// 如果没有缓存，显示"选城市"
				this.setData({
					currentCity: '选城市'
				});
			}
		} catch (error) {
			console.error('获取当前城市信息失败:', error);
			this.setData({
				currentCity: '选城市'
			});
		}
	},

	/**
	 * 跳转到搜索页面
	 */
	toSearch() {
		wx.navigateTo({
			url: '/pages/index/search'
		});
	},

	toPartner(){
		wx.navigateTo({
			url: '/pages/index/note'
		});
	},

	toBizDetail(e){
		const id = e.currentTarget.dataset.id;
		wx.navigateTo({
			url: `/pages/biz/detail?id=${id}`
		});	
	},

	toGoodsDetail(e){
		const id = e.currentTarget.dataset.id;
		wx.navigateTo({
			url: `/pages/biz/goods?id=${id}`
		});
	},

	toScan(){
		wx.scanCode({
			success: (result) => {
				console.log(result);
			}
		});
	},

	toCity(){
		wx.navigateTo({
			url: `/pages/index/city`
		});
	},

	/**
	 * 跳转到绑定手机号页面
	 */
	toBindPhone() {
		wx.navigateTo({
			url: `/pages/index/login`
		});
	},

	toMenu(e){
		const path = e.currentTarget.dataset.path;
		wx.navigateTo({
			url: path
		});
	},

	onFilterRangeChange(e){
		const type = e.currentTarget.dataset.type;
		this.setData({
			rangeType: type,
			page: 1,
			allDataLoaded: false,
			allBizList: []
		},function(){
			this.loadBizs();
		});
	},

	/**
	 * 页面上拉触底事件的处理函数
	 */
	onReachBottom() {
		if (this.data.hasMore && !this.data.loading) {
			if (this.data.filterType === 'nearby') {
				// 距离筛选时，从已加载的数据中获取下一页
				this.setData({
					page: this.data.page + 1
				}, () => {
					this.updateCurrentPageData();
				});
			} else {
				// 其他筛选类型，请求下一页数据
				this.setData({
					page: this.data.page + 1
				}, () => {
					this.loadBizsByPage();
				});
			}
		}
	},

	/**
	 * 页面相关事件处理函数--监听用户下拉动作
	 */
	onPullDownRefresh() {
		this.setData({
			page: 1,
			allDataLoaded: false,
			allBizList: []
		}, () => {
			this.loadBizs().then(() => {
				wx.stopPullDownRefresh();
			});
		});
	},
	
	toAnn(){
		wx.navigateTo({
			url: '/pages/index/ann'
		});
	},

	// 显示排序弹出层
	showSortPopup() {
		this.setData({
			showSortPopup: true
		});
	},

	// 隐藏排序弹出层
	hideSortPopup() {
		this.setData({
			showSortPopup: false
		});
	},

	// 选择排序方式
	selectSort(e) {
		const { value, name } = e.detail;
		
		this.setData({
			currentSort: value,
			currentSortName: name,
			showSortPopup: false
		});
		
		// 如果选择"附近"但没有位置权限，提示用户授权
		if (value === 'nearby' && !this.data.locationPermission) {
			this.requestLocationPermission();
			return;
		}
		
		this.setData({
			filterType: value,
			page: 1,
			allDataLoaded: false,
			allBizList: []
		},function(){
			this.loadBizs();
		});
	},

	/**
	 * 跳转到我的支付码
	 */
	toPayCode(){
		if(this.data.showPhoneBindTip == true){
			wx.navigateTo({
				url: '/pages/index/login'
			});
		}else{
			wx.navigateTo({
				url: '/pages/i/qrcode'
			});
		}
	},

	toScore(){
		if(this.data.showPhoneBindTip == true){
			wx.navigateTo({
				url: '/pages/index/login'
			});
		}else{
			wx.navigateTo({
				url: '/pages/i/score'
			});
		}
	},

})